home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 7: Sunsite / Linux Cubed Series 7 - Sunsite Vol 1.iso / system / admin / linuxcon.000 / linuxcon / linuxconf-1.6 / netconf / ifconfig.c < prev    next >
C/C++ Source or Header  |  1995-06-05  |  2KB  |  76 lines

  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <sys/ioctl.h>
  4. #include <netinet/in.h>
  5. #include <net/if.h>
  6. #include <string.h>
  7. #include "netconf.h"
  8.  
  9. static int ifconfig_ioctl(
  10.     int fd,
  11.     const char *ifname,
  12.     int cmd,
  13.     struct ifreq &ifr)
  14. {
  15.     strcpy(ifr.ifr_name, ifname);
  16.     return ioctl(fd, cmd,&ifr);
  17. }
  18.  
  19.  
  20. static void ifconfig_format (struct sockaddr &adr, char *buf)
  21. {
  22.     struct sockaddr_in *sin = (struct sockaddr_in*)&adr;
  23.     devices_ip2a (htonl(sin->sin_addr.s_addr),buf);
  24. }
  25.  
  26. /*
  27.     Fetch the inteface configuration from the kernel.
  28.     Return -1 if any error.
  29. */
  30. int ifconfig_getinfo (
  31.     const char *ifname,
  32.     IFCONFIG_INFO &info)
  33. {
  34.     int ret = -1;
  35.     int skfd = socket(AF_INET, SOCK_DGRAM, 0);
  36.     memset (&info,0,sizeof(IFCONFIG_INFO));
  37.     if (skfd != -1){
  38.         struct ifreq ifr;
  39.         if (ifconfig_ioctl(skfd, ifname, SIOCGIFFLAGS, ifr) >= 0){
  40.             info.flags = ifr.ifr_flags;
  41.             if (ifconfig_ioctl(skfd,ifname,SIOCGIFADDR, ifr) >= 0){
  42.                 ifconfig_format (ifr.ifr_addr,info.ip_addr);
  43.                 if (ifconfig_ioctl(skfd,ifname, SIOCGIFDSTADDR, ifr) >= 0) {
  44.                     ifconfig_format (ifr.ifr_dstaddr,info.dst_addr);
  45.                     if (ifconfig_ioctl(skfd, ifname,SIOCGIFNETMASK, ifr) >= 0) {
  46.                         ifconfig_format (ifr.ifr_netmask,info.netmask);
  47.                         ret = 0;
  48.                     }
  49.                 }
  50.             }
  51.         }
  52.     }
  53.     return ret;
  54. }
  55.  
  56. #ifdef TEST
  57.  
  58. int main (int, char *argv[])
  59. {
  60.     IFCONFIG_INFO info;
  61.     if (ifconfig_getinfo(argv[1],info) == -1){
  62.         fprintf (stderr,"No info on network device %s\n",argv[1]);
  63.     }else{
  64.         printf ("Network devices %s\n",argv[1]);
  65.         printf ("flags    : %04x\n",info.flags);
  66.         printf ("addr     : %s\n",info.ip_addr);
  67.         printf ("dst addr : %s\n",info.dst_addr);
  68.         printf ("netmask  : %s\n",info.netmask);
  69.     }
  70.     return 0;
  71. }
  72.  
  73. #endif
  74.  
  75.  
  76.